#!/usr/bin/env node

/**
 * Index.js 功能验证脚本
 * 在重构前验证核心功能是否正常
 */

const { spawn } = require('child_process');
const path = require('path');

console.log('🔍 开始验证 index.js 核心功能...\n');

const projectRoot = path.resolve(__dirname, '..');

// 验证1: 模块加载
console.log('📦 验证模块加载...');
try {
  require('../analyze.js');
  require('../config-checker.js');
  require('../config-manager.js');
  require('../web-config-server.js');
  require('../response-utils.js');
  require('../lib/config/json-config-manager.js');
  require('../lib/config/config-path-resolver.js');
  require('../lib/integration/service-manager.js');
  require('../lib/utils/errors.js');
  console.log('✅ 所有核心模块加载成功');
} catch (error) {
  console.error('❌ 模块加载失败:', error.message);
  process.exit(1);
}

// 验证2: 配置路径解析
console.log('⚙️  验证配置路径解析...');
try {
  const ConfigPathResolver = require('../lib/config/config-path-resolver');
  const pathResolver = new ConfigPathResolver();
  const possiblePaths = pathResolver.getAllPossiblePaths(projectRoot);

  if (Array.isArray(possiblePaths) && possiblePaths.length > 0) {
    console.log('✅ 配置路径解析正常');
  } else {
    throw new Error('配置路径解析返回空数组');
  }
} catch (error) {
  console.error('❌ 配置路径解析失败:', error.message);
  process.exit(1);
}

// 验证3: MCP SDK
console.log('🔌 验证 MCP SDK...');
try {
  require('@modelcontextprotocol/sdk/server/index.js');
  require('@modelcontextprotocol/sdk/server/stdio.js');
  require('@modelcontextprotocol/sdk/types.js');
  console.log('✅ MCP SDK 加载成功');
} catch (error) {
  console.error('❌ MCP SDK 加载失败:', error.message);
  process.exit(1);
}

// 验证4: 应用启动（异步）
console.log('🚀 验证应用启动...');
function verifyStartup() {
  return new Promise((resolve, reject) => {
    const process = spawn('node', ['index.js'], {
      cwd: projectRoot,
      stdio: ['pipe', 'pipe', 'pipe'],
      timeout: 3000
    });

    let stdout = '';
    let hasStarted = false;

    process.stdout.on('data', (data) => {
      const output = data.toString();
      stdout += output;

      if (output.includes('配置检查通过') && !hasStarted) {
        hasStarted = true;
        console.log('✅ 应用启动成功');

        // 1秒后关闭进程
        setTimeout(() => {
          process.kill('SIGTERM');
        }, 1000);
      }
    });

    process.stderr.on('data', (data) => {
      const error = data.toString();
      if (error.includes('Error') || error.includes('Failed')) {
        console.error('❌ 应用启动出现错误:', error);
        reject(new Error('启动失败'));
        return;
      }
    });

    process.on('close', (code) => {
      if (hasStarted) {
        console.log('✅ 应用正常关闭');
        resolve();
      } else {
        console.log('⚠️  应用未能启动到预期状态');
        resolve(); // 不算失败，可能只是环境问题
      }
    });

    // 3秒超时
    setTimeout(() => {
      if (!hasStarted) {
        console.log('⚠️  启动超时，但可能只是环境问题');
        resolve();
      }
    }, 3000);
  });
}

// 执行验证
verifyStartup().then(() => {
  console.log('\n🎉 所有基础验证完成！');
  console.log('✅ index.js 核心功能正常，可以安全进行重构');
}).catch((error) => {
  console.error('\n❌ 验证失败:', error.message);
  console.log('⚠️  建议先解决这些问题再进行重构');
  process.exit(1);
});